Over the past several years access servers (also referred to as communication servers or terminal servers) have been used to receive data communications and to route data from remote locations onto networks such as the Internet. For example, Internet Service Providers (ISPs) typically use access servers to administer data communications from ISP subscribers. In such implementations, the ISP typically configures one or more access servers in connection with modems, which are connected to phone lines. ISP customers, who maintain their own computers with modems, establish a connection to the ISP by placing an ordinary telephone call from their home modem to the ISP modem. The ISP modem provides data to the access server, which typically authenticates the user and facilitates a connection from the users PC to the Internet across the modem-to-modem telephone connection. Such systems may also be used to access, for example, corporate intranets or the like.
Recent advances in access server hardware has allowed the access server to support not only modem connections, but also fax, video conference, voice, multimedia, Asynchronous Transfer Mode (ATM), frame relay, and other types of connections. Such systems frequently include data communications processors such as the Any Port Products available from Conexant Systems of Newport Beach, Calif.
It is typically relatively easy to build administration systems for modem connections because many popular operating systems include modem control functionality. The Windows NT operating system available from the Microsoft Corporation of Redmond, Washington, for example, includes the Telephony Application Programming Interface (TAPI), which includes specific interface calls for interacting between computer applications running on the operating system and a modem. Similarly, Linux and other versions of UNIX typically include device drivers or Application Programming Interfaces (APIs) for interacting with-modems. Such functionality is not, however, generally provided for non-modem telephone connections and the like. Thus, it is more difficult to create applications that make use of the voice functionality included with access server hardware, since such functionality is not automatically addressable within the operating system.
One solution to this problem is to incorporate support for voice services within the operating system itself. Incorporating direct operating system support is typically quite difficult, however, because operating systems are generally created by entities other than those who create access servers and access server components. Most conventional operating systems therefore do not support the wide range of access servers and access server components that are available. Moreover, operating system solutions tend to be based upon proprietary protocols, APIs or hardware, and they are frequently slow to react to changes in access servers or access server components.
Another option is to develop a device driver that is unique for the particular access server or access server components utilized. Again, however, this approach provides a proprietary solution that is unique to the particular application or hardware device included. Such systems are slow to incorporate new functionality in operating systems or hardware, and moreover, they do not facilitate direct addressability from the external host. Direct accessibility is particularly desirable in environments with distributed gateways for routing voice and data communications. Hence, with the “gateway decomposition” schemes currently pursued, many systems providers typically require proprietary device drivers or APIs for interacting with particular hardware.
Although voice-over-network solutions such as those described above are presently in existence, numerous problems remain with universal compatibility and external administration. It is therefore desired to create a system for providing voice services over data networks (such as the Internet) that is portable across different operating systems and types of access hardware. It is also desired to create a system that is usable with distributed gateways.